{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}
{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f51\fbidi \fswiss\fcharset238\fprq2 Arial CE;}
{\f52\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\f54\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f55\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f56\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}
{\f57\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f58\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f59\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f61\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}
{\f62\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f64\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f65\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f66\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}
{\f67\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f68\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f69\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f411\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\f412\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f414\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f415\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f418\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\f431\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE;}{\f432\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr;}{\f434\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek;}{\f435\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur;}
{\f438\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}
{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
\red192\green192\blue192;\red221\green221\blue221;\red238\green238\blue238;\red204\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }
\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 
\snext0 \sqformat \spriority0 \styrsid13443536 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 
\additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \spriority0 \styrsid6297731 apple-style-span;}{\s16\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 
\ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 \sunhideused \styrsid6297731 Normal (Web);}{\*\cs17 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \spriority0 \styrsid6297731 apple-converted-space;}{\*\cs18 
\additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \ssemihidden \sunhideused \styrsid6297731 Hyperlink;}{\s19\ql \li0\ri0\widctlpar
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af2\afs20\alang1025 \ltrch\fcs0 
\f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext19 \slink20 \sunhideused \styrsid6297731 HTML Preformatted;}{\*\cs20 \additive \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20 \sbasedon10 \slink19 \slocked \styrsid6297731 
HTML Preformatted Char;}{\*\cs21 \additive \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20 \sbasedon10 \ssemihidden \sunhideused \styrsid6297731 HTML Code;}}{\*\listtable{\list\listtemplateid-433419156{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0
{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid164446441}{\list\listtemplateid-328974220{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0
{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid254368706}{\list\listtemplateid846227890{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\'01o;}{\levelnumbers;}\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid356929801}{\list\listtemplateid-905818850{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid379936693}{\list\listtemplateid1463158730{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid720516683}{\list\listtemplateid-1424082592{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid891890238}{\list\listtemplateid-96543192{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1001930749}{\list\listtemplateid1876053154{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1004934636}{\list\listtemplateid-1906436442{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1239093076}{\list\listtemplateid394175864{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1411584447}{\list\listtemplateid-809844434{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1555048432}{\list\listtemplateid1625831684{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1637295524}{\list\listtemplateid1687185296{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1880317782}}{\*\listoverridetable{\listoverride\listid1637295524\listoverridecount0\ls1}{\listoverride\listid1555048432\listoverridecount0\ls2}
{\listoverride\listid1411584447\listoverridecount0\ls3}{\listoverride\listid1239093076\listoverridecount0\ls4}{\listoverride\listid356929801\listoverridecount0\ls5}{\listoverride\listid891890238\listoverridecount0\ls6}{\listoverride\listid1001930749
\listoverridecount0\ls7}{\listoverride\listid254368706\listoverridecount0\ls8}{\listoverride\listid164446441\listoverridecount0\ls9}{\listoverride\listid1004934636\listoverridecount0\ls10}{\listoverride\listid720516683\listoverridecount0\ls11}
{\listoverride\listid379936693\listoverridecount0\ls12}{\listoverride\listid1880317782\listoverridecount0\ls13}}{\*\revtbl {Unknown;}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid6297731\rsid10121944\rsid11426716\rsid13443536}{\mmathPr\mmathFont34\mbrkBin0
\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author  Paul Nicholls}{\operator  Paul Nicholls}{\creatim\yr2011\mo8\dy3\hr14\min18}{\revtim\yr2011\mo8\dy3\hr14\min19}{\version1}{\edmins1}
{\nofpages28}{\nofwords5843}{\nofchars33309}{\*\company Altium Limited}{\nofcharsws39074}{\vern32771}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect 
\widowctrl\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale126\viewzk1\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel
\wrppunct\asianbrkrule\rsidroot6297731\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid13443536\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\ltrrow\trowd \irow0\irowband0\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat17\cltxlrtb\clftsWidth1\clcbpatraw17\clhidemark \cellx9405\pard\plain \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 
\ab\af0\afs36 \ltrch\fcs0 \b\f0\fs36\insrsid6297731\charrsid6297731 Turbo Pascal 3.0 Compiler / Code Generation Internals}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow0\irowband0\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat17\cltxlrtb\clftsWidth1\clcbpatraw17\clhidemark \cellx9405\row \ltrrow}\trowd \irow1\irowband1\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The following is documentation I created after reverse engineering the Turbo Pascal 3.01A compiler. While many features, e.g. units and objects, have been added, today's compiler is still related to the old code.
\par Before you flame me about stuff that has been fixed, remember that this is about an OLD version of the compiler.
\par NEW: This file will generate disassembled, commented source from YOUR 3.01A compiler ->\~}{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731  HYPERLINK "http://www.pcengines.ch/file/scg.zip" }}{\fldrslt 
{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\ul\cf2\insrsid6297731\charrsid6297731 SCG.ZIP}}}\sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid13443536\sftnbj {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 
\f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow1\irowband1\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow2\irowband2\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs36 \ltrch\fcs0 \b\f0\fs36\insrsid6297731\charrsid6297731 Compiler Structure}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow2\irowband2\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow3\irowband3\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Compilers usually consist of the following functional groups:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Lexical analysis
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Syntactical analysis (parser)
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Optimizer
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Code generator
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Symbol table manager
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Error handler
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
TURBO Pascal isn't your usual compiler... The parser is interspersed with portions of the code generator, and there is no optimizer. Most compilers need multiple passes to do their work, but TURBO is a (faster) single pass compiler.
\par Fortunately, programming languages of the Pascal type are designed with simple compilation in one pass in mind. All symbols must be defined before they are used. The compiler can easily determine the type of a constant without looking ahead:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 symbol
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}$7FFF
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}12345
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}
12345.5 - This is an exception. TURBO first verifies whether a numeric constant is an integer or a real constant. Actually, a standard Pascal compiler doesn't have to do this - standard Pascal requires that the integer section of a real constant be a vali
d integer number !
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}
09CFH - This notation (used by many assemblers and languages) is a negative example. Compilers - like people - read from left to right. To read a number in this notation, it has to be read into a buffer to recognize its type, then it can 
be converted. Guess why TURBO uses $ for hex numbers...\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 I wonder why Niklaus Wirth chose this notation for Modula-2.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 
\f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow3\irowband3\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow4\irowband4\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Lexical Analysis}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow4\irowband4\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow5\irowband5\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The task of the lexical analysis is to read the source code from memory or from an include file, to eliminate comments and to recognize compiler directives, symbols and keywords.
\par It is called by the parser. On each call a language element (keyword, symbol, constant...) is read. The starting position is stored. If an error is recognized the editor will be started and the cursor will point to this position.\cell }\pard \ltrpar
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow5\irowband5\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow6\irowband6\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Parsing Program Structures}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 
\f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow6\irowband6\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow7\irowband7\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The task of this part of the compiler is to analyze the structure of the program to be compiled and to check the syntax. Like most Pascal compilers, TURBO uses a recursive descent parser. The code generation is included in the parser.
\par The compilation of program structures is quite simple. Usually the syntax is described in Backus-Naur form or by a "railway diagram". As an example the IF statement will be covered.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  IF cond THEN stat1 \{ ELSE stat2 \}
\par \tab                                         ___________________
\par \tab     ____  ______  ______  ___________  /                   \\
\par \tab   ->_IF_->_expr_->_THEN_->_statement_-<>                    -->
\par \tab                                        \\______  ___________/
\par \tab                                         _ELSE_->_statement__
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
After reading an element, the parser takes the applicable track. If there isn't any the syntax is incorrect, and an error is reported.
\par It is possible to have a parser generated automatically by a so called compiler-compiler, if the Backus-Naur form of the 
syntax is given. Unfortunately this doesn't help very much: The really difficult parts of a compiler - code generation and optimization - must still be written manually.
\par How is the IF statement translated ? (The corresponding section in the compiler is at 
offset 6C12). The statement procedure reads an IF and calls the IF procedure. First the condition - actually an arithmetic expression of type boolean - is evaluated. This is done by calling the expression procedure. The expression is read until an illegal
 
symbol (THEN) is found. This terminates the expression, which is checked for type boolean. The IF procedure inserts a conditional jump to the end of statement 1 here. The displacement is inserted later - it is not yet known. If the expression has been ter
m
inated by something else than a THEN, an error is reported. Now the first statement (stat1) is translated. Actually, this is a RECURSIVE call of the statement procedure (That's why this is a recursive descent parser). Please note that the syntax definitio
n
 is recursive, too ! Because of possible nested IF statements the variables of the IF procedure are saved on the stack. After this statement, an ELSE may follow. If it does, a jump to the end of stat2 is emitted and the jump from the beginning of stat1 is
 patched, then the second statement is translated and the second jump patched.
\par The code produced looks like this:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab     (IF..THEN)              (IF..THEN..ELSE)
\par 
\par \tab         cond                    cond
\par \tab         JNZ l1                  JNZ l1
\par \tab         JMP l2                  JMP l2
\par \tab     l1: stat 1              l1: stat 1
\par \tab     l2: ...                     JMP l3
\par \tab                             l2: stat 2
\par \tab                             l3: ...
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The long jump at the beginning isn't always necessary. Unfortunately, the c
ompiler cannot predict how long the statement will be. To improve this, the jump would have to be replaced by a short one and the subsequent code moved, which would complicate the compiler quite a bit.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
All other program structures are translated in a similar way.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 
\f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow7\irowband7\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow8\irowband8\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Parsing Arithmetic Expressions}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 
\f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow8\irowband8\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow9\irowband9\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The evaluation of expressions is somewhat more complex, as the precedence of the operations has to be taken into account. The solution in TURBO is, however, quite simple (code starting at 7A70).
\par Expressions are usually translated to reverse polish notation (as used on Hewlett-Packard calculators and in the programming language FORTH).
\par There are five groups of operations:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 negation (highest precedence)
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}NOT
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}multiplication, division, ...
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}addition, subtraction, ...
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}comparisons, IN (lowest precedence)
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
This translates into the following program structure:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   PROCEDURE atom; \{ element \}
\par \tab   BEGIN
\par \tab     CASE op OF
\par \tab       CONST:read constant
\par \tab       VAR  :read variable          \{ indexing -> recursive \}
\par \tab       '('  :read expression        \{ recursive             \}
\par \tab             ')' must follow
\par \tab       func :read parameters        \{ recursive             \}
\par \tab             emit function call
\par \tab       TYPE :'(' must follow        \{ type conversion, e.g. Integer(TRUE) \}
\par \tab             read expression        \{ recursive             \}
\par \tab             ')' must follow
\par \tab             convert type -> type wanted
\par \tab       ELSE syntax error;
\par \tab     END;
\par \tab   END;
\par 
\par \tab   PROCEDURE neg; \{ negation - \}
\par \tab   VAR negflag:BOOLEAN;
\par \tab   BEGIN
\par \tab     negflag:=(op=neg);
\par \tab     atom;
\par \tab     IF negflag THEN emit negation;
\par \tab   END;
\par 
\par \tab   PROCEDURE NOT; \{ NOT \}
\par \tab   VAR notflag:BOOLEAN;
\par \tab   BEGIN
\par \tab     notflag:=(op=NOT);
\par \tab     neg;
\par \tab     IF notflag THEN emit NOT;
\par \tab   END;
\par 
\par \tab   PROCEDURE mult_level; \{ multiplication ... \}
\par \tab   VAR mult_op:operation;
\par \tab   BEGIN
\par \tab     NOT;
\par \tab     WHILE op IN mult_ops DO BEGIN
\par \tab       save the result;
\par \tab       mult_op:=op;
\par \tab       NOT;
\par \tab       emit operation(mult_op);
\par \tab     END;
\par \tab   END;
\par 
\par \tab   PROCEDURE add_level; \{ addition ... \}
\par \tab   VAR add_op:operation;
\par \tab   BEGIN
\par \tab     mult_level;
\par \tab     WHILE op IN add_ops DO BEGIN
\par \tab       save the result;
\par \tab       add_op:=op;
\par \tab       mult_level;
\par \tab       emit operation(add_op);
\par \tab     END;
\par \tab   END;
\par 
\par \tab   PROCEDURE expression; \{ comparisons, IN \}
\par \tab   VAR cmp_op:operation;
\par \tab   BEGIN
\par \tab     add_level;
\par \tab     IF op IN cmp_ops THEN BEGIN
\par \tab       save the result;
\par \tab       cmp_op:=op;
\par \tab       add_level;
\par \tab       emit operation(cmp_op);
\par \tab     END;
\par \tab   END;
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Example 1:}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \~Translation of (a+b)=c -> RPN = a , b + c =
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab curr. char, stack (active procedure),              code produced
\par \tab ---
\par \tab (:expression add_level mult_level not neg atom
\par \tab a:... expression add_level mult_level not neg atom
\par \tab +:... expression add_level                         -> MOV  AX,a
\par \tab b:... expression add_level mult_level not neg atom
\par \tab ):... expression add_level                         -> ADD  AX,b
\par \tab ):expression add_level mult_level not neg atom
\par \tab =:expression
\par \tab c:expression add_level mult_level not neg atom
\par \tab  :expression                                       -> CMP  AX,c
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Please note:}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The parentheses trigger a recursive call of the expression procedure.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}The code production always lags behind the analysis. This improves the code produced (e.g.\~}{\rtlch\fcs1 \af2 
\ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 ADD AX,b}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 ).
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Example 2:}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \~Translation of a+b*c -> RPN = a , b , c * +
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab curr. char, stack (active procedure),              code produced
\par \tab ---
\par \tab a:expression add_level mult_level not neg atom
\par \tab +:expression add_level                             -> MOV  AX,a
\par \tab b:expression add_level mult_level not neg atom
\par \tab *:expression add_level mult_level                  -> PUSH AX
\par \tab                                                    -> MOV  AX,b
\par \tab c:expression add_level mult_level not neg atom
\par \tab  :expression add_level mult_level                  -> IMUL c
\par \tab  :expression add_level                             -> POP  CX
\par \tab                                                    -> ADD  AX,CX
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Please note:}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The content of\~}{\rtlch\fcs1 \af2 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 a}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \~must be stacked, as the AX register is needed for the multiplication. This is recognized by setting the flag\~}{\rtlch\fcs1 \af2 
\ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 push_ax}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 . If subsequent code uses the AX register (destroying its content), it has to emit\~}{\rtlch\fcs1 \af2 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 PUSH AX}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 . Finally, if this has happened, the register must be restored by\~}{\rtlch\fcs1 \af2 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 POP CX}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 .
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}The code produced is rather simple-minded. By transforming the expression to b*c+a better code could be produced:

\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV  AX,b
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   IMUL c
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   ADD  AX,a
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 During eval
uation, type checking and type conversion (Integer -> Real...) is also done.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The 8088 instruction set is often not used well. a:=a+1 yields this code (INC a would be better):
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV  AX,a
\par \tab   ADD  AX,#1
\par \tab   MOV  a,AX
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Expressions usually account for the bul
k of the code produced, so their translation is very important.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 
\f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow9\irowband9\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow10\irowband10\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Optimization}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow10\irowband10\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow11\irowband11\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The goal of code optimization is reducing the size and/or execution time of the code produced. It is usually impossible to find an optimal solution, as a space-time tradeoff has to be made. TURBO Pascal doesn't have an optimizer. However, to improve the e
fficiency of your programs by manual optimizations or by add-on optimizers, it is good to know how common optimizations work.
\par Optimizations can be local or global: They can cover a single statement or an entire program. Global optimization is much more difficult and can cause problems. GOTO's and function or procedure calls can keep the optimizer from working efficiently.
\par Side effects can cause errors that are hard to find. Try it - you'll get what you deserve... An example:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   FUNCTION funny:INTEGER;
\par \tab   BEGIN
\par \tab     side_effect:=side_effect+1;
\par \tab     funny:=5;
\par \tab   END;
\par 
\par \tab   ...
\par 
\par \tab   a:=side_effect+funny+side_effect;
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The evaluation sequence and thus the result depends on the compiler used.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Variables don't necessarily stay constant between assignments. Consider this:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   wait_int:=FALSE;
\par \tab   REPEAT UNTIL wait_int;
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
This might wait for an interrupt procedure to set a flag. An optimizing compiler would convert this to an endless loop...\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 Modern C compilers use the\~}{\rtlch\fcs1 \ai\af2 
\ltrch\fcs0 \i\f2\fs20\insrsid6297731\charrsid6297731 volatile}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 \~keyword to avoid this.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Use of Register Variables}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Many load and store operations can be eliminated by using register variables. On the 8088 this is rather difficult, as there are few registers, often with special uses.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Common Subexpressions}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   c:=(a+b)*d;
\par \tab   e:=g-(a+b);
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The subexpression (a+b) can be used twice. Expressions of the form a[i]:=a[i]+ 1 also are a good target for optimizations.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Array Indexing}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par References with constant indices (a[5]) or indices with a constant offset (a[i+1]) can be optimized. Array indexing in loops can often be improved considerably, too.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Constant Folding}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Programs can be more readable if constants expressions can be written in a symbolic form. The compiler can evaluate these expressions at compilation time.\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 
Later versions of the compiler do this.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Strength Reduction}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par This means replacing operations by "cheaper" equivalents, e.g. x*0.2 instead of x/5 (multiplications are faster than divisions).
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Loop Optimization}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   FOR i:=1 TO 100 DO dest[i]:=a+b;
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The subexpression a+b can be evaluated outside the loop, as a and b don't change in the loop.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Dead Code Elimination}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CONST debug=FALSE;
\par 
\par \tab   IF debug THEN writeln('Debug');
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The IF statement can be left out - the condition is never met. The same thing can be done with procedures which are never used. There are optimizers that eliminate all unused procedures from the run-time library of programs translated by TURBO Pascal.\~}{
\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 Later versions of the compiler do this.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 
Evaluation of Boolean Expressions}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   IF (a=5) AND (b=6) THEN ... can be changed into
\par 
\par \tab   IF (a=5) THEN
\par \tab     IF (b=6) THEN ...
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The same thing can be done with OR and NOT. Never expect boolean expressions to be executed completely !\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 Later versions of the compiler do this.}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Variable Alignment}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Variables in the data segment and on the stack should be aligned to even offsets to improve performance on 16 bit PC's.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {
\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow11\irowband11\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow12\irowband12\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Code Generation}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow12\irowband12\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow13\irowband13\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The code generator has the difficult task of translating the elements recognized by the parser into executable code. If it gets difficult to tell whether the code has been generated by a human programmer or by a compiler then it is indeed a good one... Do
n't expect too much of this from TURBO.
\par In the following sections the code produced by TURBO will be explained.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Program}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   run-time library, if not chain file
\par \tab   CALL  initmem       ;set segments
\par \tab   W     mainflag      ;see source code
\par \tab   W     turbocs,turbods
\par \tab   W     cssize,dssize
\par \tab   w     heapsize,maxhpsz
\par \tab   w     maxfile,stdinsz,stdoutsz
\par \tab   MOV   BP,SP         ;stack frame
\par \tab   CALL  uncrunch      ;expand overlays
\par \tab   W     link,*+2
\par \tab   definition part
\par \tab   program part = main program
\par \tab   XOR   AX,AX         ;Halt
\par \tab   CALL  progend
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Definition Part}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The definition part may contain code, therefore it must be skipped over by:\~
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   JMP   l1
\par \tab   
\par \tab   l1:
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Structured Constants}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Structured constants are stored in the same format as normal variables.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Overlays}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The space needed for overlays is not stored in the COM file. It is freed by the uncrunch procedure. This means moving up the subsequent code. This is executed at the beginning of program execution and after loading an overlay procedure.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CALL  rdover        ;read overlay file
\par \tab   W     $ffff         ;overlay procedure now in memory = invalid
\par \tab   B     'over.001'    ;name of overlay file
\par 
\par \tab     In the section read from the overlay file:
\par 
\par \tab     CALL  uncrunch      ;expand overlay
\par \tab     W     link,*+2      ;link for uncrunching
\par \tab     overlay procedure / function
\par 
\par \tab   W     link,*        ;for uncrunching
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Forward Definitions}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par For forward definitions a jump to the final definition is produced. The displacement is inserted when the real definition is made.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   JMP   defined_proc
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 External Procedures}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The code read from an external file is not changed.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Procedure Definitions}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Local variables of procedures and functions are always stored on the stack. This means that only active procedures take up space on the stack. This also enables recursive calls. The transfer of parameters and the allocation of stack space can be quite com
plicated, thus slowing down procedure calls.
\par For every procedure a data structure called stack frame or activation record is built on the stack. The pointer to the stack frame is always stored in the BP register (the 8088 can't use the stack pointer SP as i
ndex register). The structure of the stack frame is as follows:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   BP+.:function result (space allocated by caller)
\par \tab   BP+.:first parameter
\par \tab   BP+4:last parameter
\par \tab   BP+2:return address
\par \tab   BP+0:pointer to caller's stack frame
\par \tab   BP-2:new stack frame
\par \tab   BP-4:local variables
\par \tab   BP-.:stack top
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The code for a standard procedure entry looks like this:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   PUSH  BP            ;save old pointer
\par \tab   MOV   BP,SP         ;set new pointer
\par \tab   PUSH  BP            ;save new pointer (for display)
\par \tab   definition part     ;constants, local procedures
\par \tab   SUB   SP,#size      ;allocate space for local variables
\par \tab                       ;1..2 bytes: DEC SP
\par \tab   program part        ;the actual procedure
\par \tab   MOV   SP,BP         ;forget local variables
\par \tab   POP   BP            ;restore old pointer
\par \tab   RET   prmsize       ;return, remove parameters from stack
\par \tab                       ;no parameters: RET
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
How function results are passed depends on their type. Scalars (integer...) are returned in AX, for boolean results the flags are set with OR AX,AX. Reals are on the stack anyway. Strings must be moved such that they occupy only their effective length:

\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV   DX,#pos_on_stack
\par \tab   MOV   CL,#max_len
\par \tab   MOV   SP,BP
\par \tab   POP   BP
\par \tab   JMP   retstr        ;the normal end is omitted
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Unfortunately, things aren't that simple. Consider nested procedure definitions:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   PROCEDURE level1;
\par \tab   VAR
\par \tab     i:INTEGER;
\par 
\par \tab     PROCEDURE level2;
\par \tab     BEGIN
\par \tab       i:=0;
\par \tab       level2;
\par \tab     END;
\par 
\par \tab   BEGIN
\par \tab     level2;
\par \tab   END;
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The inner procedure level
2 uses a local variable of level1, but also calls itself recursively. The stack offset of i depends on the calling order. TURBO Pascal uses a so called display to resolve this. The display contains pointers to the stack frames of calling procedures. Each 
procedure also adds its own pointer to the display. The display is an extension of the stack frame.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   BP+0:old pointer
\par \tab   BP-2:display outermost procedure
\par \tab   BP-.:display
\par \tab   BP-.:display current procedure
\par \tab   BP-.:local variables
\par \tab   BP-.:stack top
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 This is maintained by the following code:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   PUSH  BP            ;save old pointer
\par \tab   MOV   AX,SP         ;set new pointer - keep BP
\par \tab   PUSH  [BP-nest*2]   ;build display
\par \tab    ..                 ;once for each nesting level
\par \tab   MOV   BP,AX         ;set new pointer
\par \tab   PUSH  BP            ;add own pointer to display
\par \tab   definition part
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Newer CPU's (186, 286...) have special commands for these operations (ENTER, LEAVE). Please note that referencing variables via the display is slower than normal references. If speed is important don't nest procedure definitions.\cell }\pard \ltrpar
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow13\irowband13\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow14\irowband14\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx8734\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl 
\clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx8898\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9062\clvertalc\clbrdrt\brdrtbl 
\clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9226\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f39\fs27\insrsid6297731\charrsid6297731 Program Structures}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\cell \cell \cell \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow14\irowband14\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx8734\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl 
\clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx8898\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9062\clvertalc\clbrdrt\brdrtbl 
\clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9226\clvertalc\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\clftsWidth1\clshdrawnil\clhidemark \cellx9405\row \ltrrow
}\trowd \irow15\irowband15\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Program Part}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   statements
\par \tab   l1: JMP l2          ;jump to the end
\par \tab   POP   AX            ;GOTO, EXIT: clean up the stack
\par \tab   JMP   l1
\par \tab   l2:
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
GOTO's and EXIT's aren't really that simple. Sometimes stack variables (FOR, WITH) must be removed, which is done at the end of the procedure.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Statement}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par If the user interrupt directive is set, an INT 3 is emitted for each statement. This calls a routine wh
ich checks for user interrupts. This feature can be "misused" to trace a program or to profile its execution time. If this isn't used anywhere in the program, you can also insert breakpoints as INLINE statements for debugging with DEBUG.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 IF}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par This has been covered above.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 WHILE}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   l1: condition       ;evaluate condition
\par \tab   J..   l2            ;:condition met
\par \tab   JMP   l3
\par \tab   l2: statement
\par \tab   JMP   l1            ;try again
\par \tab   l3:                 ;end of loop
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 REPEAT}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   l1: statement
\par \tab   condition           ;evaluate condition
\par \tab   J..   l2            ;condition met: end
\par \tab   JMP   l1            ;not met: repeat
\par \tab   l2:
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 REPEAT loops are faster than WHILE loops.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 FOR}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The counter (stored on stack) and the control variable are independent: assignments to the control variable don't change the number of loop executions.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   starting value -> AX
\par \tab   PUSH  AX
\par \tab   ending value -> AX
\par \tab   POP   CX
\par \tab   XCHG  CX,AX
\par \tab   SUB   CX,AX         ;calculate difference
\par \tab   JGE   l1            ;(DOWNTO: JNG)
\par \tab   JMP   l3            ;don't execute
\par \tab   l1: INC CX          ;(DEC CX)
\par \tab   
\par \tab   l2: PUSH CX         ;save counter
\par \tab   
\par \tab   POP   CX            ;restore counter
\par \tab   DEC   CX            ;(INC CX)
\par \tab   JZ    l3            ;0: done
\par \tab   INC   loop_var      ;(DEC) update control variable
\par \tab   JMP   l2            ;loop
\par \tab   l3:                 ;end
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 CASE}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CASE .. OF
\par \tab     2,5 : .. ;
\par \tab     7..9: .. ;
\par \tab     ELSE  .. ;
\par \tab   END;
\par 
\par \tab    ;evaluate selection
\par \tab   CMP   AX,#2         ;compare
\par \tab   JZ    ok1           ;:yes
\par \tab   CMP   AX,#5
\par \tab   JZ    ok1           ;:yes
\par \tab   JMP   test2         ;try next case
\par \tab   ok1:     ;ok - execute
\par \tab   JMP   endcase       ;jump to end
\par \tab   test2: CMP AX,#7    ;check subrange
\par \tab   JL    test2no       ;:no
\par \tab   CMP   AX,#9
\par \tab   JLE   ok2           ;:yes
\par \tab   test2no: JMP else   ;no: execute ELSE part
\par \tab   ok2:     ;ok - execute
\par \tab   JMP   endcase
\par \tab   else:    ;ELSE part
\par \tab   endcase:
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Complicated CASE statements can exceed the range of short jumps. In this case so called "hips" are emitted:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   JMP   hip2          ;skip hip
\par \tab   hip: JMP ok         ;jump to statement part
\par \tab   hip2:               ;normal continuation
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Some compilers also use this technique for IF and other statements.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 GOTO}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par A jump is emitted. If the GOTO leaves a WITH or a FOR block, the stack must be cleaned up. This is recognized and fixed at the end of the program part.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 WITH}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The compiler has an internal WITH stack. The pointers for indexed WITH's are stored on the stack:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   set pointer to variable
\par \tab   PUSH ES             ;store pointer on stack
\par \tab   PUSH DI
\par \tab   statement
\par \tab   ADD   SP,#4         ;remove pointer from stack
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
If the address is known at compilation time this is not necessary.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Procedure Calls}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par If the directive K+ is set, a stack check is executed:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV   CX,#space_needed
\par \tab   CALL  xchkstk
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Then parameters are evaluated and passed:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Normal parameter:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab evaluate expression
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab optional range check
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab PUSH  DX            ;pointer
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab PUSH  AX            ;scalar and pointer
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 String:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab MOV   CL,#max_length;string is extended to maximal length
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab CALL  xstrparm      ;-> on stack like a local variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Set:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab MOV   CX,#crunch    ;set crunch parameter:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab                     ;lo = number of bytes
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab                     ;hi = number empty bytes at beginning
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab CALL  xsetparm      ;adapt set
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Real: already on stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Structured variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab MOV   CX,#size
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab MOV   xblkparm      ;copy variable onto stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 VAR parameters: put pointer on stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab PUSH  ES
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab PUSH  DI
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
For overlay procedures this must be inserted:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV   AX,#length/256
\par \tab   MOV   DX,#pos in overlay file / 256
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Then the procedure is called by
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CALL  proc.
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Function Call}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Stack space is allocated for the result (SUB SP,#space_needed), everything else is the same. On return the result is on stack (real, string) or in AX (integer, scalar). It would be easy to return structured variables - I don't understand why this isn't a 
standard feature. It would make things like complex arithmetics much easier.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Calling Standard Procedures and Functions}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Standard procedures like Read and Write can have any number of parameters of any type. This means much flexibility is needed. This problem is solved in TURBO in a very efficient way: The standard procedure table only contains the address of the correspond
ing translation routine. This routine emits the code for reading the parameters (some of them passed in registers !) and for calling the run-time library. Some functions (Swap, Hi, Lo) don't call a procedure but create inline code instead.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Assignments and Expressions}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Scalar / pointer: ES and DI are saved, if necessary. This is only done if the expression does not consist of a constant or a simple variable.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Normal variable:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   PUSH  ES            ;save pointer to destination variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   PUSH  DI
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   evaluate expression
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   type conversion
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   store result in destination variable
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Structured variable:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab   pointer to second variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   CX,#size      ;pointer to destination variable on stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xmovevar      ;copy variable
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Type conversions:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab   CALL  xintreal      ;Integer -> Real
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AH,AL         ;Char -> String: char -> second byte
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AL,01         ;length: 1 char
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   PUSH  AX            ;push as string
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xstrch        ;String -> Char
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Expressions}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The algorithms for translation of expressions were explained in section 4. Arithmetic operations for scalars are emitted by ecalc. For each operation there's a parameter block (starting at 973E) controlling the code generation.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   expr1 - 5     -> SUB  AX,#5
\par \tab   expr1 - var   -> SUB  AX,var
\par \tab   expr1 - expr2 -> XCHG CX,AX (first result in CX, second in AX)
\par \tab                    SUB  AX,CX
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Expressions of the a:=a+1 type aren't translated well. a:=succ(a) is better, but not optimal.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Set Expressions}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Sets are stored in a compressed form and must be expanded to their full size (32 bytes) for doing set operations. Because of this set operations tend to be slow. Set constructors are handled in an inefficient way. [5,var1..var2] is translated like this:

\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CALL  sldempty      ;store empty set on stack
\par \tab   MOV   AX,#5         ;expression = 5
\par \tab   CALL  setincl       ;include element in set
\par \tab   MOV   AX,var1       ;first expression subrange
\par \tab   PUSH  AX            ;save
\par \tab   MOV   AX,var2       ;second expression subrange
\par \tab   CALL  setinrng      ;include subrange in set
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
If the parameters are variable this is all right. For constant sets this is disastrous.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 IF ch IN ['0'..'9','A'..'Z','a'..'z','_'] THEN ...}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 
\f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The conventional solution. Very slow, as the set is always built when this is executed. Takes much space for complicated sets.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 CONST setcn:SET OF char = ['0'..'9','A'..'Z','a'..'z','_'];
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab IF ch IN setcn THEN ...
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par }\pard \ltrpar\ql \li720\ri0\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
This takes up somewhat more space for this example (set constant takes up 32 bytes), but is much faster.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 CASE ch OF
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   '0'..'9','A'..'Z','a'..'z','_':...;
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab END;
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par }\pard \ltrpar\ql \li720\ri0\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
For simple cases this gives the shortest and fastest code.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Variable References}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 MEM / MEMW}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   expression: segment
\par \tab   PUSH  AX
\par \tab   expression: offset
\par \tab   XCHG  DI,AX         ;pointer -> ES:DI
\par \tab   POP   ES
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Use ABSOLUTE for variables with a constant address.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 WITH Indexing}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par In a WITH block all variable names must be searched first in the scopes of the active records and then in the regular symbol table. This can take quite some time. If the base offset is not k
nown at compilation time (WITH rec[var] DO), a WITH pointer must be calculated and stored on the stack, otherwise this is done at compilation time.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Array Indexing, String Indexing}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par If necessary ES and DI must be saved before evaluation. Different code is produced depending on the index.
\par Constant index: The index is checked at compilation time, multiplied by the element size and added to the base offset, no code is emitted.
\par Variable index with range checking:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   SUB   AX,#lower_bound (max be DEC AX / nothing)
\par \tab   MOV   CX,#upper_bound+1
\par \tab   CALL  xindchk       ;check index
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Variable index without range checking: The subtraction of the lower bound can be omitted, it is multiplied by the element size and then subtracted from the base offset.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The index is multipli
ed by the element size. This is optimized for some important element sizes:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   no code             ;size = 1
\par 
\par \tab   SHL   AX,1          ;size = 2
\par 
\par \tab   SHL   AX,1          ;size = 4
\par \tab   SHL   AX,1
\par 
\par \tab   SHL   AX,1          ;size = 6
\par \tab   MOV   CX,AX
\par \tab   SHL   AX,1
\par \tab   ADD   AX,CX
\par 
\par \tab   MOV   CX,#size      ;other element sizes
\par \tab   MUL   CX
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The index is then stored in DI:

\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   XCHG  DI,AX
\par /pre>
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731  or added to the existing index: 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   ADD   DI,AX
\par \tab 
\par 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 
\b\f2\fs20\insrsid6297731\charrsid6297731 Record Indexing}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab 
\par This is very simple: The offset of the record variable is added to the memory
\par \tab offset of the variable.
\par 
\par \tab 
\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\insrsid6297731\charrsid6297731 Pointer indexing}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab 
\par \tab  Pointers are loaded with LES DI,pointer_var.
\par 
\par \tab 
\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\insrsid6297731\charrsid6297731 Use of Addressing Modes}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab 
\par The procedure }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 einstr}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731  emits a command using the correct
\par \tab addressing mode. If necessary a segment prefix (CS: or ES:) is inserted.
\par \tab 
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 not indexed, not on stack:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   AX,var
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 indexed:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   AX,[DI]       ;no offset
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,[DI]offs8  ;short offset (-128..127)
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,[DI]offs16 ;long offset (0..65535)
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 stack, local variables:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   AX,[BP]offs   ;not indexed
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,[BP+DI]offs;indexed
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 stack, callers local variables:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   BX,[BP]-lev*2 ;read display pointer
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   SS:                 ;indexed by BX - need prefix
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,[BX]offs   ;not indexed
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,[BX+DI]offs;or indexed
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 
\b\f2\fs20\insrsid6297731\charrsid6297731 Calculate Pointer to Variable}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   indexing
\par \tab 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731  The offset is read into DI: 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   MOV   DI,#offset    ;not indexed
\par \tab   ADD   DI,#offset    ;indexed: short or long offset
\par \tab   LEA   DI,[BP]offs   ;stack: load effective address
\par \tab 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731  The segment is handed over on the stack:
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   PUSH  CS/DS/ES/SS
\par \tab 
\par 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 
\b\f2\fs20\insrsid6297731\charrsid6297731 Read Variable}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Scalar:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   AX,var        ;integer, not indexed, not on stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOVB  AL,var        ;byte, not indexed, not on stack
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   AX,..         ;other integer (emitted by einstr)
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOVB  AL,..         ;other byte
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li720\ri0\sbauto1\saauto1\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {
\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab For byte variables XOR AH,AH is inserted - TURBO always uses integer variables
\par \tab \tab internally.
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Pointer:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   LES   AX,ptr_var    ;AX = offset
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   DX,ES         ;DX = segment
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Real:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xldreal
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Set:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   CX,#set_crunch
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xldset
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 String:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls10\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  strload
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 
\b\f2\fs20\insrsid6297731\charrsid6297731 Store Variable}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab 
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Scalar: If R+ is set, range checking is done:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   CX,#lower_bound
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   DX,#upper_bound
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xrngchk
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li720\ri0\sbauto1\saauto1\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {
\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab If the variable is neither indexed nor on the stack, there's a short form
\par \tab \tab again:
\par \tab 
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731   MOV   var,AX        ;integer
\par \tab   MOVB  var,AL        ;byte
\par \tab 
\par }\pard \ltrpar\ql \li720\ri0\sbauto1\saauto1\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {
\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par \tab \tab Otherwise the correct MOV is emitted by }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 einstr}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 .
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Pointer:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   MOV   dest,AX       ;offset
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   dest+2,DX     ;segment
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Real:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  xstoreal
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 String:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   CL,#max_length
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  strstore
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par 
\par 
\par \tab \tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 Set:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab 
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731   set pointer to variable
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   MOV   CX,#set_crunch
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}\tab   CALL  setsto
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 
\par 
\par \tab \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow15\irowband15\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow16\irowband16\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Symbol Table}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow16\irowband16\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow17\irowband17\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The symbol table manager has to insert and search symbols of any type. The difficulty is that definitions may be of any complexity and names may have any length. The structure implemented in TURBO closely represents the definition and reference sequence, 
making it easy to "navigate" through complex types.
\par Symbols are searched beginning with the most recent definition. For new definitions, the current block (limited by the "fence" set at the beginning of a procedure definition) and the keyword table are sear
ched for duplicate definitions. Thus it is possible to override old definitions. At the end of a procedure local variables may be removed from the symbol table. This reduces memory usage and search time.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Symbol Table Entry Structure}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The symbol table "symtab" is stored in the stack segment (the actual stack doesn't need much space) and grows down. The entries have this basic structure:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   off  :next entry
\par \tab   --
\par \tab   off-2:tag word = entry type
\par \tab   off-4:name length
\par \tab   off-5:name
\par \tab   off-.:entry
\par \tab       0:offset to next entry
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The symbol table is always searched backwards, looking at the most recent entries first. A linear search is used. Sample symbol table entries can be found in the compiler tables (starting from 9277).
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0100: Label}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 1:procedure nesting (to prevent jumps into or out of procedures)
\par \tab  - 2:0=ok, FF=not yet defined
\par \tab  - 4:offset
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0200: Constant}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 1:type of constant
\par \tab  - 3:constant - strings are stored backwards
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Structured constants are initialized variables stored in the code segment and are entered as such in the symbol table.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0300: Type}{\rtlch\fcs1 
\af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:pointer to type definition
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0400: Variable}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par For subvariables of a record the low byte of the tag word is the number of the record definition this entry belongs to.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:pointer to type definition
\par \tab  - 4:offset
\par \tab  - 5:0=normal, FF=indirect (VAR)
\par \tab  - 6:segment
\par \tab      FF = DS
\par \tab      FE = CS
\par \tab      FD = ES (via pointer)
\par \tab      .. = SS, the number corresponds to the procedure nesting level
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
For ABSOLUTE variables of the form $B800:0 a pointer is stored in the code segment, the symbol table entry id CS indirect.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0500: Procedure}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0600: Function}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:function only - pointer to result type
\par \tab  - 4:function only - offset on stack
\par \tab  - 5:function only - 0 = normal, FF = indirect
\par \tab  - 6:function only - segment: SS
\par \tab  - 8:code offset of procedure / function
\par \tab  - A:position in overlay file / of forward jump
\par \tab  - C:0=ok, FF=forward definition
\par \tab  - E:length of overlay procedure
\par \tab  -10:number of parameter lists
\par \tab  - 2:type pointer                      |may be repeated
\par \tab  - 3:0=normal, FF=VAR parameter        |
\par \tab  - 4:number of parameters of this type |
\par \tab  - 5:names                             |
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The parameters are also listed as local variables.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Structure of Subentries}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The normal entries aren't sufficient for the description of complex types. Unnamed subentries are used for this. For complex definitions this gives a tree structure. ARRAY[1..15] OF INTEGER is an array having the subrange
 1..15 as index type and INTEGER as element type.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 tag = 0000, 0800: Subentries}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size
\par \tab  - 4:lower bound / pointer to type definition
\par \tab  - 6:upper bound / pointer to index type definition
\par \tab  - 7:flag / record number
\par \tab  - 8:component type
\par \tab       1 = array
\par \tab       2 = record
\par \tab       3 = set
\par \tab       4 = pointer
\par \tab       5 = typed file   (FILE OF)
\par \tab       6 = text file    (TEXT)
\par \tab       7 = untyped file (FILE)
\par \tab       8 = string
\par \tab       9 = real
\par \tab       A = integer
\par \tab       B = boolean
\par \tab       C = char
\par \tab       . = enumeration types (numbered)
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The compiler often uses this register assignment:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   CL = component type
\par \tab   CH = where's the result ?
\par \tab         0 = constant
\par \tab         1 = variable
\par \tab         2 = in AX / on stack
\par \tab         3 = flags set (jz/jnz)
\par \tab         4 = comparison, use branch opcode brnchop
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The use of the subentry fields depends on the component type:

\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Array
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size
\par \tab  - 4:type pointer
\par \tab  - 6:pointer to index type
\par \tab  - 8:01
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Record
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size
\par \tab  - 7:record number
\par \tab  - 8:02
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Set
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size
\par \tab  - 4:pointer to index type
\par \tab  - 8:03
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Pointer
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size = 4
\par \tab  - 6:pointer to type / type name
\par \tab  - 7:0=ok, FF=not yet resolved
\par \tab  - 8:04
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Pointers can be forward defined. In this case the type name is stored as an invisible entry. The type pointer is then inserted later.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 String
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:length + 1
\par \tab  - 8:08
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Text file with nonstandard buffer size
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:component size
\par \tab  - 8:06
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Enumeration type, subrange
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  - 2:size: 1 or 2 bytes
\par \tab  - 4:lower bound
\par \tab  - 6:upper bound
\par \tab  - 8:number of enumeration type
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 The elements of an enumeration type are stored as constants.

\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Symbol Table Search}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par TURBO uses a linear search to find symbols in the symbol table. This can be slow. A worst case program can get compilation speed down to 0.022 lines per second...
\par There is a better way: Hashing.\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f0\fs24\insrsid6297731\charrsid6297731 This is used in later versions of the compiler.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell 
}\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow17\irowband17\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow18\irowband18\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Error Handler}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow18\irowband18\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow19\irowband19\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Many compilers try to continue compilation after an error has been found. The difficulty about this is that this shouldn't trigger an avalanche of meaningless error messages.
\par TURBO always stops if an error is found. This can also be seen as an advantage: The programmer is forced to solve problems one at a time.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow19\irowband19\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow20\irowband20\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Run-time Library}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow20\irowband20\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow21\irowband21\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
In the run-time library all standard procedures and functions needed for the execution of programs are stored. TURBO does this in a rather wasteful (but simple) way: it always inserts all procedures.\~}{\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 
\i\f0\fs24\insrsid6297731\charrsid6297731 Later versions of the compiler only include the procedures that are actually used.}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Memory Map}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The segments are allocated as follows:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   --
\par \tab    stack     (SS)  (grows down)
\par \tab   --
\par \tab    free
\par \tab   --
\par \tab    heap            (grows up)
\par \tab   --
\par \tab    variables (DS)
\par \tab   --
\par \tab    code      (CS)
\par \tab   --
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Heap}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Heap storage is allocated in blocks having a size that is a multiple of 8 bytes. The free blocks are kept track of with this structure:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab  +0: pointer to next free block -> linked list
\par \tab  +4: length of free block
\par \tab  +8: free block
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Hpstrt points to the first
 free block. The last block in the list - the free space between stack and heap - is marked by a 0. If there isn't enough space between heap and stack an error is reported.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Floating Point Arithmetics}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Floating point numbers are divided into two parts: The exponent gives the order of magnitude, the mantissa gives the accuracy needed.
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab   number = mantissa * 2 ^ exponent
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The mantissa is a binary fraction with an accuracy of 40 bits. The mantissa always represents a number between 0.5 and 1, i.e. it is normali
zed. This means the most significant bit is always 1. Here the sign is stored. The examples use decimal numbers for simplicity.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
A floating point addition works as follows:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab    0.95 E+00
\par \tab +  0.60 E-01
\par 
\par \tab    0.95 E+00   The number with the smaller exponent is
\par \tab +  0.06 E+00   adjusted (de-normalized) to match the other.
\par \tab =  1.01 E+00   The numbers can now be added as usual.
\par \tab                The result is too big, it must be normalized
\par \tab =  0.10 E+01   and rounded up.
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Please note that floating point additions an
d subtractions can cause large round off errors, if the exponents differ too much.
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
It is often claimed that BCD arithmetics cause less errors. This is not correct - they are not as visible. Some calculators actually do cosmetic rounding, if the result is n
ear to an integer number. The best way to avoid round off errors is to calculate money amounts in cents and not in dollars. BCD multiplications and divisions are slow. However, BCD does have one advantage: Conversions to and from ASCII are much faster. As
 business applications usually consist mainly of additions and subtractions, BCD can actually be faster.
\par Floating point multiplication
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab    0.13 E+00   The exponents are added (division: subtracted)
\par \tab *  0.49 E+03   and the mantissas are multiplied.
\par 
\par \tab    0.13 E+00
\par \tab *  0.49 E+00
\par \tab *       E+03
\par 
\par \tab =  0.0637      The additional digits are cut off and the
\par \tab *       E+03   result is normalized and rounded up.
\par 
\par \tab =  0.64 E+02
\par \tab 
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Square roots are evaluated using Newton's approximation. This is a good solution, but not
 the best: The 8087 does square roots faster than divisions ! Transcendental functions are evaluated using the standard polynomials found in math books. I have seen better algorithms to do this. Don't expect much speed and precision from TURBO transcenden
tals.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow21\irowband21\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow22\irowband22\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat17\cltxlrtb\clftsWidth1\clcbpatraw17\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs36 \ltrch\fcs0 \b\f0\fs36\insrsid6297731\charrsid6297731 Appendix}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow22\irowband22\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat17\cltxlrtb\clftsWidth1\clcbpatraw17\clhidemark \cellx9405\row \ltrrow}\trowd \irow23\irowband23\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Bugs}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 
\f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow23\irowband23\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow24\irowband24\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Thanks to the relative simplicity of the algorithms used TURBO Pascal is almost bug-free. Well, almost.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 Set as Procedure Parameter}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par If the last element is in the range 248..255 and the first above 7, this doesn't work. Redefine the set or pass it as a VAR parameter.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 SizeOf}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par Sometimes a redundant load is emitted.
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 UpCase}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par The argument type is not checked. Try UpCase(15).
\par }{\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\f0\fs24\insrsid6297731\charrsid6297731 WHILE}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
\par DO can be omitted.\cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow24\irowband24\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow25\irowband25\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Compiler Speed}{\rtlch\fcs1 \af0\afs24 
\ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 
\trowd \irow25\irowband25\ltrrow\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow}\trowd \irow26\irowband26\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
TURBO may be faster than most other compilers, but there's still a wide margin for improvements:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls12\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 symbol table: use hashing
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}include files: use larger buffer
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}don't copy source lines into another buffer
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
The editor could be much faster. The screen is re-displayed in an "intelligent" way (using DelLine and InsLine). On a terminal this may be faster - with memory mapped video this is a nuisance. Search and replace is slow.\cell }\pard \ltrpar
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow26\irowband26\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row \ltrrow}\trowd \irow27\irowband27\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \ab\af0\afs27 \ltrch\fcs0 \b\f0\fs27\insrsid6297731\charrsid6297731 Write Faster Programs Using TURBO Pascal}{
\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 \cell }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 
\f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow27\irowband27\ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat18\cltxlrtb\clftsWidth1\clcbpatraw18\clhidemark \cellx9405\row \ltrrow
}\trowd \irow28\irowband28\lastrow \ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\pard \ltrpar
\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Avoid the standard string functions.
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl
\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls13\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 Use ord(st[0]) instead of length(st)
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af0 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Use move instead of string assignments:
\par {\listtext\pard\plain\ltrpar \intbl\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid6297731\charrsid6297731 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\widctlpar\intbl
\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\ls13\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
\f2\fs20\insrsid6297731\charrsid6297731 \tab   move(st1,st2,max_len+1);
\par }\pard \ltrpar\ql \li720\ri0\widctlpar\intbl\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\pararsid6297731 {\rtlch\fcs1 
\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6297731\charrsid6297731 \tab 
\par }\pard \ltrpar\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid6297731 {\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid6297731\charrsid6297731 
Write real constants with decimal point (10.0 instead of 10). This eliminates conversions.
\par GOTO statement considered harmful. So what... If a GOTO is the best way to express a program structure - use it ! TURBO GOTO's are still better than BASIC GOTO's: names can be used instead of numbers.
\par I/O can be improved if larger buffers are used (use multiples of 512 bytes for best results). Use BlockRead and BlockWrite. If large blocks are read or written the MS-DOS and TURBO overhead doesn't matter as much as for small blocks.\cell }\pard \ltrpar
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f0\fs20\insrsid6297731\charrsid6297731 \trowd \irow28\irowband28\lastrow \ltrrow
\ts11\trgaph15\trleft-45\trftsWidth1\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl15\trpaddt15\trpaddb15\trpaddr15\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid6297731
\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \clcbpat8\cltxlrtb\clftsWidth1\clcbpatraw8\clhidemark \cellx9405\row }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs24 \ltrch\fcs0 \f1\fs24\cf19\insrsid6297731\charrsid6297731 \'a9 2002-2010 PC Engines GmbH. All rights reserved.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 
\insrsid9057280 
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65
312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8
a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04
98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c
94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471
7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671
9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1
e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5
193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1
17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2
8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6
6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a
668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847
bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e
16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b
5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0
8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2
c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966
0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b
7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb
9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0
088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf
8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26
ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0
28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6
345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93
b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30
254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74
68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24
51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198
720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528
a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000
000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000
002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468
656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000
00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000
00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000000011
15949451cc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}